package com.object.bases;


/*
##构造方法
    由于构造方法是如此特殊，所以构造方法的名称就是类名。构造方法的参数没有限制，在方法内部，也可以编写任意语句。但是，和普通方法相比，构造方法没有返回值（也没有void），调用构造方法，必须用new操作符。
## 默认构造方法
    所有的类都有构造方法，如果一个类没有构造方法，编译器会自动生成一个默认构造方法，他没有参数没有语句。
    如果我们自定义了一个构造方法，那么，编译器就不再自动创建默认构造方法：
    如果既要能使用带参数的构造方法，又想保留不带参数的构造方法，那么只能把两个构造方法都定义出来：
    没有在构造方法中初始化字段时，引用类型的字段默认是null，数值类型的字段用默认值，int类型默认值是0，布尔类型默认值是false：
    创建对象实例的时候，按照如下顺序进行初始化：
    1.先初始化字段，例如，int age = 10;表示字段初始化为10，double salary;表示字段默认初始化为0，String name;表示引用类型字段默认初始化为null；
    2.执行构造方法的代码进行初始化
## 多构造方法
    可以定义多个构造方法，在通过new操作符调用的时候，编译器通过构造方法的参数数量、位置和类型自动区分：
    一个构造方法可以调用其他构造方法，这样做的目的是便于代码复用。调用其他构造方法的语法是this(…)：
##小结
    实例在创建时通过new操作符会调用其对应的构造方法，构造方法用于初始化实例；
    没有定义构造方法时，编译器会自动创建一个默认的无参数构造方法；
    可以定义多个构造方法，编译器根据参数自动判断；
    可以在一个构造方法内部调用另一个构造方法，便于代码复用。
 */
public class ConstructionMethodStu {
    public static void main(String[] args) {
        PersonConstruction p1 = new PersonConstruction("Xiao Ming", 15); // 既可以调用带参数的构造方法
        PersonConstruction p2 = new PersonConstruction(); // 也可以调用无参数构造方法
    }
}


class PersonConstruction {
    private String name;
    private int age;

    public PersonConstruction() {
    }

    public PersonConstruction(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return this.name;
    }

    public int getAge() {
        return this.age;
    }
}
